var sTelMask = "(##) ####-####";
var sCpfMask = "###.###.###-##";


function ApplyNumbersMask(s, sMask){
    var sOutput = "";
    var sNumbers = GetNumbers(s)
    var iNumberCount = 0;
    for (var x=0; x<sMask.length && iNumberCount<sNumbers.length; x++){
        var sLetter = sMask.substr(x,1)
        if (sLetter == "#"){
            sOutput += sNumbers.substr(iNumberCount++, 1);
        }else{
            sOutput += sLetter;
        }
    }
    return sOutput;
}

/**
* funcao para aplicar uma mascara de telefone
* @param s - uma string
* @return um telefone formatado
*/ 
function TelMask(s){
    return ApplyNumbersMask(s, sTelMask);
}

/**
* funcao para pegar apenas os numeros de uma String
* @param s - uma string de entrada.
* @return uma string soh com os numeros um atras do outro
*/ 
function GetNumbers(s){

    var sNumbers ="";
    for (var x=0; x<s.length; x++){
        var sLetter = s.substr(x,1)
        if (!isNaN(sLetter) && sLetter != " ") {
            sNumbers += sLetter;
        }
    }
    return sNumbers;

}

/**
* funcao para pegar apenas os numeros de uma String
* @param s - uma string de entrada.
* @return uma string soh com os numeros um atras do outro
*/
function GetNonNumbers(s){

    var sNonNumber ="";
    for (var x=0; x<s.length; x++){
        var sLetter = s.substr(x,1)
        if (!(!isNaN(sLetter) && sLetter != " ")) {
            sNonNumber += sLetter;
        }
    }
    return sNonNumber;

}


/**
* updates the value of a input using a specified mask.
* recommended use: onkeypress;
* i.e.: \code
*       <input type="text"  onkeypress="UpdateNumberMask(this, '##-##')" />
* 
* @param field - the input itself.
* @param sMask - the number mask (use # for numbers).
*/ 
function UpdateNumberMask(field, sMask){
    setTimeout(function(){
        field.value = ApplyNumbersMask(field.value, sMask)
    },10)
}

/**
* atualiza o valor de um campo usando a mascara de telefone
* ideal para usar no evento onkeyXXXX
* ex: \code
*       <input type="text"  onkeypress="UpdateTelMask(this)" />
* 
* @param field -  o campo a ser atualizado.
*/ 
function UpdateTelMask(field){
    UpdateNumberMask(field, sTelMask);
	/*
	setTimeout(function(){
        field.value = ApplyNumbersMask(field.value, sTelMask)
    },10)
	//*/
}
/**
* atualiza o valor de um campo usando a mascara de cpf
* ideal para usar no evento onkeyXXXX
* ex: \code
*       <input type="text"  onkeypress="UpdateCpfMask(this)" />
* 
* @param field -  o campo a ser atualizado.
*/ 
function UpdateCpfMask(field){
    UpdateNumberMask(field, sCpfMask);
	/*
    setTimeout(function(){
        field.value = ApplyNumbersMask(field.value, sCpfMask);
    },10)
	//*/
}
/**
* atualiza o valor de um campo filtrando apenas numeros
* ideal para usar no evento onkeyXXXX
* ex: \code
*       <input type="text"  onkeypress="UpdateNumbersOnly(this)" />
* 
* @param field -  o campo a ser atualizado.
*/ 
function UpdateNumbersOnly(field){
    setTimeout(function(){
        field.value = GetNumbers(field.value)
    },10)
}


function IsNumberInput(iKeyCode){
	return (iKeyCode >= 48 && iKeyCode <= 57)
	;
}
/**
* botoes como alt, ctrl, setas direcionais, shift sao tudo invisiveis
*/
function IsVisibleInput(iKeyCode){
	return !(iKeyCode <=46);
}
